package com.thread;

import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

/**
 * @author: mayu
 * @date: 2021年04月12日 9:09
 */
public class TestABC123WithSynchronized {
    public static void main(String[] args) {
        final Object lock = new Object();

        new Thread(() -> {
            synchronized (lock) {
                Arrays.asList("A", "B", "C", "D", "E", "F").stream().forEach(item -> {
                    try {
                        System.out.print(item);
                        //lock.wait();这里wait()在notify()之前的话，可能会导致释放锁之后，还是本线程抢到这把锁，就导致了线程一直处于阻塞状态，第二个线程抢不到锁，就无法输出
                        lock.notify();
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                });
                //这里不加，程序不会停止
                lock.notify();
            }
        }).start();

        new Thread(() -> {
            synchronized (lock) {
                IntStream.range(1, 7).forEach(item -> {
                    try {
                        System.out.print(item);
                        lock.notify();
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                });
                //这里不加，程序不会停止
                lock.notify();
            }
        }).start();
    }
}
